package com.wkm.chainchain.pbft.p2p;

import com.wkm.chainchain.websocket.Server;
import org.java_websocket.server.WebSocketServer;

import java.net.InetSocketAddress;

/**
 * 服务器只需要启动即可, 用单例模式, 并在第一次调用时设置端口号
 */
public class PBFTServer implements Server {
    private static final PBFTServer pbftServer = new PBFTServer();

    public static PBFTServer getInstance(int port) {
        pbftServer.initServer(port);
        return pbftServer;
    }

    /**
     * 初始化P2P Server端
     *
     * @param port :Server端的端口号
     */
    @Override
    public void initServer(int port) {
        /**
         * 创建有一个WebSocket的服务端
         * 定义了一个WebSocketServer的匿名子类对象socketServer
         * new InetSocketAddress(port)是WebSocketServer构造器的参数
         * InetSocketAddress是(IP地址+端口号)类型，也就是端口地址类型
         */
        final WebSocketServer socketServer = new BlockchainWebSocketServer(new InetSocketAddress(port));
        socketServer.start();
        System.out.println("监听socketServer端口" + port);
    }
}
